import pymysql
from config.config import MYSQL_CONFIG

def create_tables():
    """创建必要的数据库表"""
    try:
        # 连接数据库
        conn = pymysql.connect(
            host=MYSQL_CONFIG['host'],
            port=MYSQL_CONFIG['port'],
            user=MYSQL_CONFIG['user'],
            password=MYSQL_CONFIG['password'],
            db=MYSQL_CONFIG['db'],
            charset=MYSQL_CONFIG['charset']
        )
        
        with conn.cursor() as cursor:
            # 创建课程表
            cursor.execute("""
            CREATE TABLE IF NOT EXISTS courses (
                id INT AUTO_INCREMENT PRIMARY KEY,
                title VARCHAR(255) NOT NULL,
                category VARCHAR(100),
                tags VARCHAR(255),
                description TEXT,
                difficulty ENUM('easy', 'medium', 'hard') DEFAULT 'medium',
                teacher_id INT,
                teacher_name VARCHAR(100),
                keywords VARCHAR(255),
                popularity FLOAT DEFAULT 0,
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
            """)
            
            # 创建用户行为表
            cursor.execute("""
            CREATE TABLE IF NOT EXISTS user_behaviors (
                id INT AUTO_INCREMENT PRIMARY KEY,
                user_id INT NOT NULL,
                course_id INT NOT NULL,
                event_type ENUM('view', 'click', 'favorite', 'rate', 'complete', 'purchase') NOT NULL,
                timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                extra_data JSON,
                INDEX idx_user_id (user_id),
                INDEX idx_course_id (course_id),
                INDEX idx_event_type (event_type),
                INDEX idx_timestamp (timestamp)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
            """)
            
            conn.commit()
            print("数据库表创建成功")
            
    except Exception as e:
        print(f"创建数据库表失败: {e}")
    finally:
        if conn:
            conn.close()

def insert_sample_data():
    """插入示例数据（仅供测试使用）"""
    try:
        # 连接数据库
        conn = pymysql.connect(
            host=MYSQL_CONFIG['host'],
            port=MYSQL_CONFIG['port'],
            user=MYSQL_CONFIG['user'],
            password=MYSQL_CONFIG['password'],
            db=MYSQL_CONFIG['db'],
            charset=MYSQL_CONFIG['charset']
        )
        
        with conn.cursor() as cursor:
            # 检查是否已有课程数据
            cursor.execute("SELECT COUNT(*) FROM courses")
            course_count = cursor.fetchone()[0]
            
            # 如果没有课程数据，插入示例课程
            if course_count == 0:
                # 插入示例课程
                sample_courses = [
                    ('Web前端开发基础', '前端开发', 'HTML,CSS,JavaScript', '学习Web前端开发的基础知识', 'easy', 1, '张老师', 'web,前端,HTML,CSS,JavaScript'),
                    ('Python编程入门', '编程语言', 'Python,编程基础', '从零开始学习Python编程', 'easy', 2, '李老师', 'Python,编程,入门'),
                    ('数据结构与算法', '计算机科学', '数据结构,算法,编程', '掌握基本的数据结构与算法', 'medium', 3, '王老师', '数据结构,算法,编程'),
                    ('Java高级编程', '编程语言', 'Java,面向对象,高级编程', '深入学习Java高级特性和设计模式', 'hard', 2, '李老师', 'Java,编程,高级,面向对象'),
                    ('微信小程序开发', '前端开发', '微信,小程序,JavaScript', '从零开始学习微信小程序开发', 'medium', 4, '赵老师', '微信,小程序,前端,JavaScript'),
                    ('Vue.js框架入门到精通', '前端开发', 'Vue,JavaScript,前端框架', '详解Vue.js框架的使用和原理', 'medium', 1, '张老师', 'Vue,前端,框架,JavaScript'),
                    ('React框架实战', '前端开发', 'React,JavaScript,前端框架', 'React框架的实战应用', 'medium', 5, '钱老师', 'React,前端,框架,JavaScript'),
                    ('Node.js后端开发', '后端开发', 'Node.js,JavaScript,后端', '使用Node.js进行后端开发', 'medium', 6, '孙老师', 'Node.js,后端,JavaScript'),
                    ('MySQL数据库设计与优化', '数据库', 'MySQL,数据库,SQL', '学习MySQL数据库的设计和优化', 'hard', 7, '周老师', 'MySQL,数据库,SQL,优化'),
                    ('大数据分析入门', '数据科学', '大数据,数据分析,Hadoop', '大数据分析技术入门', 'hard', 8, '吴老师', '大数据,分析,Hadoop')
                ]
                
                for course in sample_courses:
                    cursor.execute("""
                    INSERT INTO courses (title, category, tags, description, difficulty, teacher_id, teacher_name, keywords)
                    VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
                    """, course)
                
                conn.commit()
                print(f"插入了 {len(sample_courses)} 条示例课程数据")
            
            # 检查是否已有用户行为数据
            cursor.execute("SELECT COUNT(*) FROM user_behaviors")
            behavior_count = cursor.fetchone()[0]
            
            # 如果没有用户行为数据，插入示例行为
            if behavior_count == 0:
                # 插入一些用户行为数据
                import random
                import json
                from datetime import datetime, timedelta
                
                # 用户ID范围：1-50
                user_ids = range(1, 51)
                
                # 获取课程ID范围
                cursor.execute("SELECT MIN(id), MAX(id) FROM courses")
                course_id_range = cursor.fetchone()
                min_course_id, max_course_id = course_id_range
                
                # 事件类型
                event_types = ['view', 'click', 'favorite', 'rate', 'complete', 'purchase']
                
                # 生成随机行为数据
                behaviors = []
                now = datetime.now()
                
                for _ in range(1000):  # 生成1000条行为数据
                    user_id = random.choice(user_ids)
                    course_id = random.randint(min_course_id, max_course_id)
                    event_type = random.choice(event_types)
                    
                    # 随机生成1-30天内的时间
                    days_ago = random.randint(1, 30)
                    timestamp = now - timedelta(days=days_ago)
                    
                    # 生成额外数据
                    extra_data = {}
                    if event_type == 'rate':
                        # 随机评分1-5 (确保是数值类型)
                        extra_data['rating'] = float(random.randint(1, 5))
                    
                    behaviors.append((user_id, course_id, event_type, timestamp, json.dumps(extra_data)))
                
                # 批量插入数据
                cursor.executemany("""
                INSERT INTO user_behaviors (user_id, course_id, event_type, timestamp, extra_data)
                VALUES (%s, %s, %s, %s, %s)
                """, behaviors)
                
                conn.commit()
                print(f"插入了 {len(behaviors)} 条示例用户行为数据")
            
    except Exception as e:
        print(f"插入示例数据失败: {e}")
    finally:
        if conn:
            conn.close()

if __name__ == "__main__":
    print("开始初始化推荐系统...")
    
    # 创建数据库表
    create_tables()
    
    # 插入示例数据
    insert_sample_data()
    
    print("推荐系统初始化完成") 